package cn.bonoon.kernel.menus;

/**
 * 在一个功能里定义操作，可以控制用户是否可以使用这些操作。操作如：添加、修改、删除等可以。
 * 菜单下定义的操作权限的操作项，属于整个菜单定义结构的最末端，也就是整个菜单定义的叶子节点
 * 所以他也是属于一个树形结构，需要{@link cn.bonoon.kernel.Xpathable Xpathable}接口
 * 
 * @author jackson
 * 
 */
public class ActionDefinition extends XpathItemable implements ItemableDefinition{
	
	private final int key;
	private final String keyName;
	private final MenuableDefinition menu;
	
	public ActionDefinition(MenuableDefinition menu, int key, String keyName, String name){
		this.menu = menu;
		this.key = key;
		this.keyName = keyName;
		this.name = name;
	}
	
	public String getKeyName() {
		return keyName;
	}
	
	public void init(PlatformContext platformContext, ModuleContext moduleContext, ParentContainer parent) {
		this.id = parent.getId() + "@" + key;
		this.xpath = platformContext.xpathGenerate(parent.getXpath());
	}

	public int getKey() {
		return key;
	}
	
	public boolean match(Number target){
		return null != target && ((target.longValue() & key) == key);
	}
	
	@Override
	public ModuleDefinition getModule() {
		return menu.getModule();
	}

	@Override
	public ChannelDefinition getChannel() {
		return menu.getChannel();
	}
	
	public MenuableDefinition getMenu() {
		return menu;
	}
}
